================================================================================
cstring
================================================================================
@str = internal constant [18 x i8] c"Double value: %f\0A\00"
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (linkage
      (linkage_aux))
    (type_and_value
      (type
        (array_type
          (array_vector_body
            (number)
            (type
              (type_keyword)))))
      (value
        (cstring)))))

================================================================================
multiple argument attributes
================================================================================
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
--------------------------------------------------------------------------------

(module
  (declare
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword))
          (param_or_return_attrs
            (attribute_name))
          (param_or_return_attrs
            (attribute_name)))
        (argument
          (type
            (type_keyword))
          (param_or_return_attrs
            (attribute_name))
          (param_or_return_attrs
            (attribute_name)))
        (argument
          (type
            (type_keyword)))
        (argument
          (type
            (type_keyword)))))))

================================================================================
return attribute
================================================================================
declare zeroext i16 @foo() #0
--------------------------------------------------------------------------------

(module
  (declare
    (function_header
      (param_or_return_attrs
        (attribute_name))
      (type
        (type_keyword))
      (global_var)
      (argument_list)
      (attribute
        (attr_ref)))))

================================================================================
string metadata argument
================================================================================
define void @main() {
  %p2 = call i1 @llvm.type.test(i8* %1, metadata !"_ZTS1D")
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (type
                (type_keyword))
              (value
                (var
                  (local_var))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref))))))))))

================================================================================
specialized metadata argument
================================================================================
define void @main() {
  call void @llvm.dbg.value(metadata i32 %1, metadata !24, metadata !DIExpression()), !dbg !25
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (metadata
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (var
                      (local_var))))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref))))))
        (metadata_refs
          (metadata_name)
          (metadata
            (specialized_md
              (metadata_ref))))))))

================================================================================
specialized metadata or
================================================================================
!2 = distinct !DISubprogram(name: "main", scope: !4, file: !3, line: 1, type: !12, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagMainSubprogram, unit: !4)
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (number))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (number))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))))))

================================================================================
bfloat constant
================================================================================
define bfloat @check_bfloat_literal() {
  ret bfloat 0xR3149
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword))
            (value
              (number))))))))

================================================================================
global key-value pairs
================================================================================
@g1 = global i32 7 "key" = "value" "key2" = "value2"
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (type_keyword))
      (value
        (number)))
    (attribute
      (string)
      (string))
    (attribute
      (string)
      (string))))

================================================================================
packed struct
================================================================================
define void @qux(<{i32, i32}>* %x) nounwind {
  store <{i32, i32}><{i32 7, i32 9}>, <{i32, i32}>* %x
  ret void
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (packed_struct_type
              (struct_body
                (type
                  (type_keyword))
                (type
                  (type_keyword)))))
          (value
            (var
              (local_var)))))
      (attribute
        (attribute_name)))
    (function_body
      (instruction
        (instruction_store
          (type_and_value
            (type
              (packed_struct_type
                (struct_body
                  (type
                    (type_keyword))
                  (type
                    (type_keyword)))))
            (value
              (packed_struct_value
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (number)))
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (number))))))
          (type_and_value
            (type
              (packed_struct_type
                (struct_body
                  (type
                    (type_keyword))
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword))))))))

================================================================================
specialized metadata with type and value
================================================================================
define void @main() {
  call void @llvm.dbg.value(metadata !DIArgList(i32 %add, i32 %call30, i32 %call28, i32 %call26, i32 %call24, i32 %call22, i32 %call20, i32 %call18, i32 %call16, i32 %call14, i32 %call12, i32 %call10, i32 %call8, i32 %call6, i32 %call4, i32 %call2), metadata !15, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 15, DW_OP_plus, DW_OP_LLVM_arg, 14, DW_OP_plus, DW_OP_LLVM_arg, 13, DW_OP_plus, DW_OP_LLVM_arg, 12, DW_OP_plus, DW_OP_LLVM_arg, 11, DW_OP_plus, DW_OP_LLVM_arg, 10, DW_OP_plus, DW_OP_LLVM_arg, 9, DW_OP_plus, DW_OP_LLVM_arg, 8, DW_OP_plus, DW_OP_LLVM_arg, 7, DW_OP_plus, DW_OP_LLVM_arg, 6, DW_OP_plus, DW_OP_LLVM_arg, 5, DW_OP_plus, DW_OP_LLVM_arg, 4, DW_OP_plus, DW_OP_LLVM_arg, 3, DW_OP_plus, DW_OP_LLVM_arg, 2, DW_OP_plus, DW_OP_LLVM_arg, 1, DW_OP_plus, DW_OP_stack_value)), !dbg !16
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (metadata
                (specialized_md
                  (metadata_ref)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var)))
                  (specialized_md_value)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value
                    (var
                      (local_var))))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value))))))
        (metadata_refs
          (metadata_name)
          (metadata
            (specialized_md
              (metadata_ref))))))))

================================================================================
global with multiple metadatas
================================================================================
@_ZTV1B = constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* undef, i8* bitcast (i32 (%struct.B*, i32)* @_ZN1B1fEi to i8*), i8* bitcast (i32 (%struct.A*, i32)* @_ZN1A1nEi to i8*)] }, !type !0, !type !1
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (struct_type
          (struct_body
            (type
              (array_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword))))))))
      (value
        (struct_value
          (type_and_value
            (type
              (array_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (array_value
                (type_and_value
                  (type
                    (type_keyword))
                  (value))
                (type_and_value
                  (type
                    (type_keyword))
                  (value))
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (constant_expr
                      (constant_cast
                        (cast_inst)
                        (type_and_value
                          (type
                            (type_keyword)
                            (argument_list
                              (argument
                                (type
                                  (local_var)))
                              (argument
                                (type
                                  (type_keyword)))))
                          (value
                            (var
                              (global_var))))
                        (type
                          (type_keyword))))))
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (constant_expr
                      (constant_cast
                        (cast_inst)
                        (type_and_value
                          (type
                            (type_keyword)
                            (argument_list
                              (argument
                                (type
                                  (local_var)))
                              (argument
                                (type
                                  (type_keyword)))))
                          (value
                            (var
                              (global_var))))
                        (type
                          (type_keyword))))))))))))
    (metadata_refs
      (metadata_name)
      (metadata
        (specialized_md
          (metadata_ref))))
    (metadata_refs
      (metadata_name)
      (metadata
        (specialized_md
          (metadata_ref))))))

================================================================================
parameter align metadata
================================================================================
define void @main() {
  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 8 %tmp1, i8* align 8 %memtmp2, i32 24, i1 false)
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (type
                (type_keyword))
              (param_or_return_attrs
                (number))
              (value
                (var
                  (local_var))))
            (argument
              (type
                (type_keyword))
              (param_or_return_attrs
                (number))
              (value
                (var
                  (local_var))))
            (argument
              (type
                (type_keyword))
              (value
                (number)))
            (argument
              (type
                (type_keyword))
              (value))))))))

================================================================================
personality with constant expr
================================================================================
define hidden void @test_normal(i8* noalias %dst, i8* %src) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (linkage
        (visibility))
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword))
          (param_or_return_attrs
            (attribute_name))
          (value
            (var
              (local_var))))
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var)))))
      (attribute
        (type_and_value
          (type
            (type_keyword))
          (value
            (constant_expr
              (constant_cast
                (cast_inst)
                (type_and_value
                  (type
                    (type_keyword)
                    (argument_list
                      (argument)))
                  (value
                    (var
                      (global_var))))
                (type
                  (type_keyword))))))))
    (function_body)))

================================================================================
name with dash
================================================================================
define void @main() {
  %0 = phi i8* [ %add.ptr.i, %for.cond.while.cond.loopexit_crit_edge.us-lcssa ], [ %1, %while.cond ]
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_phi
          (type
            (type_keyword))
          (value
            (var
              (local_var)))
          (local_var)
          (value
            (var
              (local_var)))
          (local_var))))))

================================================================================
opaque type
================================================================================
%0 = type opaque
--------------------------------------------------------------------------------

(module
  (global_type
    (local_var)
    (type
      (type_keyword))))

================================================================================
complex inline metadata
================================================================================
define void @main() {
  %val = load %T, %T* %a, !alias.scope !{!10}
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_load
          (type
            (local_var))
          (type_and_value
            (type
              (local_var))
            (value
              (var
                (local_var)))))
        (metadata_refs
          (metadata_name)
          (metadata
            (metadata_tuple
              (metadata
                (specialized_md
                  (metadata_ref))))))))))

================================================================================
name with backslash
================================================================================
define void @main() {
  unreachable, !\34\32abc !4
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_unreachable)
        (metadata_refs
          (metadata_name)
          (metadata
            (specialized_md
              (metadata_ref))))))))

================================================================================
quoted struct name
================================================================================
define void @_Z3foov(%"class.std::auto_ptr"* noalias nocapture sret(%"class.std::auto_ptr") %agg.result) ssp {
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (local_var))
          (param_or_return_attrs
            (attribute_name))
          (param_or_return_attrs
            (attribute_name))
          (param_or_return_attrs
            (attribute_name)
            (type
              (local_var)))
          (value
            (var
              (local_var)))))
      (attribute
        (attribute_name)))
    (function_body)))

================================================================================
externally_initialized
================================================================================
@GLOBAL = addrspace(1) externally_initialized global i32 0, align 4, !dbg !0
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (addrspace
      (number))
    (type_and_value
      (type
        (type_keyword))
      (value
        (number)))
    (attribute
      (alignment
        (number)))
    (metadata_refs
      (metadata_name)
      (metadata
        (specialized_md
          (metadata_ref))))))

================================================================================
nsw/nuw order
================================================================================
define void @main() {
  %z = add nsw nuw i64 %x, %y
	ret i64 add nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_bin_op
          (bin_op_keyword
            (atomic_bin_op_keyword))
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))
          (value
            (var
              (local_var)))))
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword))
            (value
              (constant_expr
                (constant_bin_op
                  (bin_op_keyword
                    (atomic_bin_op_keyword))
                  (type_and_value
                    (type
                      (type_keyword))
                    (value
                      (constant_expr
                        (constant_cast
                          (cast_inst)
                          (type_and_value
                            (type
                              (type_keyword))
                            (value
                              (var
                                (global_var))))
                          (type
                            (type_keyword))))))
                  (type_and_value
                    (type
                      (type_keyword))
                    (value
                      (number))))))))))))

================================================================================
readnone argument
================================================================================
define i32 @main(i32 %argc, i8** nocapture readnone %argv) local_unnamed_addr #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var))))
        (argument
          (type
            (type_keyword))
          (param_or_return_attrs
            (attribute_name))
          (param_or_return_attrs
            (attribute_name))
          (value
            (var
              (local_var)))))
      (unnamed_addr)
      (attribute
        (attr_ref))
      (attribute
        (type_and_value
          (type
            (type_keyword))
          (value
            (constant_expr
              (constant_cast
                (cast_inst)
                (type_and_value
                  (type
                    (type_keyword)
                    (argument_list
                      (argument)))
                  (value
                    (var
                      (global_var))))
                (type
                  (type_keyword))))))))
    (function_body)))

================================================================================
select with fast-math flags
================================================================================
define void @main() {
  %fabs = select nnan i1 %lezero, double %negx, double %x
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_select
          (fast_math)
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var)))))))))

================================================================================
float exponent without sign
================================================================================
define void @main() {
  %t2 = fdiv arcp reassoc <2 x float> <float 15.0e0, float 7.0e0>, %t1
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_bin_op
          (bin_op_keyword)
          (fast_math)
          (fast_math)
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (vector_value
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (float)))
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (float))))))
          (value
            (var
              (local_var))))))))

================================================================================
label names
================================================================================
define void @main() {
"2": ; string label, quoted number
  br label %-3
-3: ; numeric-looking, but actually string, label
  br label %-N-
-N-:
  br label %$N
$N:
  %4 = add i32 1, 1
  ret i32 %4
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (label)
      (comment)
      (instruction
        (instruction_br
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))))
      (label)
      (comment)
      (instruction
        (instruction_br
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))))
      (label)
      (instruction
        (instruction_br
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))))
      (label)
      (instruction
        (local_var)
        (instruction_bin_op
          (bin_op_keyword
            (atomic_bin_op_keyword))
          (type_and_value
            (type
              (type_keyword))
            (value
              (number)))
          (value
            (number))))
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var)))))))))

================================================================================
instruction attribute
================================================================================
define void @main() {
  %M = call i8* @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (type
                (type_keyword))
              (value
                (var
                  (local_var))))
            (argument
              (type
                (type_keyword))
              (value
                (number))))
          (attribute
            (attribute_name)
            (type
              (type_keyword))))))))

================================================================================
quoted function name
================================================================================
define void @main() {
  call void @"?terminate@@YAXXZ"() #4 [ "funclet"(token %5) ]
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list)
          (attribute
            (attr_ref))
          (operand_bundles
            (string)
            (type_and_value
              (type
                (type_keyword))
              (value
                (var
                  (local_var))))))))))

================================================================================
specialized md with set
================================================================================
!1 = !GenericDINode(tag: 3, header: "some\00header", operands: {!0, !3, !4})
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (number))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md_value
            (specialized_md
              (metadata_ref)))
          (specialized_md_value)
          (specialized_md_value
            (specialized_md
              (metadata_ref)))
          (specialized_md_value)
          (specialized_md_value
            (specialized_md
              (metadata_ref))))))))

================================================================================
global with alignment
================================================================================
@global = external local_unnamed_addr global [4 x [4 x [2 x i16]]] align 16
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (linkage
      (linkage_aux))
    (unnamed_addr)
    (type_and_value
      (type
        (array_type
          (array_vector_body
            (number)
            (type
              (array_type
                (array_vector_body
                  (number)
                  (type
                    (array_type
                      (array_vector_body
                        (number)
                        (type
                          (type_keyword))))))))))))
    (attribute
      (alignment
        (number)))))

================================================================================
global attributes
================================================================================
attributes #0 = { nofree nounwind allocsize(0) }
--------------------------------------------------------------------------------

(module
  (unnamed_attr_grp
    (attr_ref)
    (attribute
      (attribute_name))
    (attribute
      (attribute_name))
    (attribute
      (attribute_name)
      (number))))

================================================================================
special chars
================================================================================
$"??_C@_0BC@CABPINND@Exception?5caught?$AA?$AA@" = comdat any
--------------------------------------------------------------------------------

(module
  (comdat
    (comdat_ref)))

================================================================================
summary with attribute
================================================================================
^2 = gv: (guid: 1, summaries: (function: (module: ^0, flags: (linkage: external, visibility: default, notEligibleToImport: 0, live: 0, dsoLocal: 0), insts: 10, calls: ((callee: ^15, hotness: hot), (callee: ^17, hotness: cold), (callee: ^16, hotness: none)), refs: (writeonly ^14, readonly ^13, ^11))))

^11 = gv: (guid: 10, summaries: (variable: (module: ^0, flags: (linkage: common, visibility: default, notEligibleToImport: 0, live: 0, dsoLocal: 0), varFlags: (readonly: 0))))

^2 = flags: 97
--------------------------------------------------------------------------------

(module
  (summary_entry
    (summary_ref)
    (summary_value)
    (summary_value)
    (summary_value
      (number))
    (summary_value)
    (summary_value)
    (summary_value)
    (summary_value
      (summary_value)
      (summary_value)
      (summary_value
        (summary_value)
        (summary_value)
        (summary_value
          (summary_ref))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (summary_value)
          (summary_value)
          (summary_value
            (linkage_aux))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number)))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (number))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (summary_value
            (summary_value)
            (summary_value)
            (summary_value
              (summary_ref))
            (summary_value)
            (summary_value)
            (summary_value)
            (summary_value
              (attribute_name)))
          (summary_value)
          (summary_value
            (summary_value)
            (summary_value)
            (summary_value
              (summary_ref))
            (summary_value)
            (summary_value)
            (summary_value)
            (summary_value
              (attribute_name)))
          (summary_value)
          (summary_value
            (summary_value)
            (summary_value)
            (summary_value
              (summary_ref))
            (summary_value)
            (summary_value)
            (summary_value)
            (summary_value)))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (summary_value
            (attribute_name))
          (summary_value
            (summary_ref))
          (summary_value)
          (summary_value
            (attribute_name))
          (summary_value
            (summary_ref))
          (summary_value)
          (summary_value
            (summary_ref))))))
  (summary_entry
    (summary_ref)
    (summary_value)
    (summary_value)
    (summary_value
      (number))
    (summary_value)
    (summary_value)
    (summary_value)
    (summary_value
      (summary_value)
      (summary_value)
      (summary_value
        (summary_value)
        (summary_value)
        (summary_value
          (summary_ref))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (summary_value)
          (summary_value)
          (summary_value
            (linkage_aux))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number))
          (summary_value)
          (summary_value)
          (summary_value)
          (summary_value
            (number)))
        (summary_value)
        (summary_value)
        (summary_value)
        (summary_value
          (summary_value
            (attribute_name))
          (summary_value)
          (summary_value
            (number))))))
  (summary_entry
    (summary_ref)
    (number)))

================================================================================
summary with attribute
================================================================================
!8 = !DITemplateValueParameter(tag: DW_TAG_GNU_template_template_param, name: "param", type: !1, value: !"template")
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))))))

================================================================================
opaque pointer
================================================================================
@fptr1 = external global ptr ()*
@fptr3 = external global ptr () addrspace(1)* addrspace(2)*

define ptr @g(ptr addrspace(2) %a) {
    %b = addrspacecast ptr addrspace(2) %a to ptr addrspace(0)
    ret ptr addrspace(0) %b
}
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (linkage
      (linkage_aux))
    (type_and_value
      (type
        (type_keyword)
        (argument_list))))
  (global_global
    (global_var)
    (linkage
      (linkage_aux))
    (type_and_value
      (type
        (type_keyword)
        (argument_list)
        (addrspace
          (number))
        (addrspace
          (number)))))
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword)
            (addrspace
              (number)))
          (value
            (var
              (local_var))))))
    (function_body
      (instruction
        (local_var)
        (instruction_cast
          (cast_inst)
          (type_and_value
            (type
              (type_keyword)
              (addrspace
                (number)))
            (value
              (var
                (local_var))))
          (type
            (type_keyword)
            (addrspace
              (number)))))
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword)
              (addrspace
                (number)))
            (value
              (var
                (local_var)))))))))

================================================================================
ppc_fp128 type
================================================================================
define void @main() {
  %scale.0 = phi ppc_fp128 [ 0xM3FF00000000000000000000000000000, %if.else14 ], [ %scale.0, %do.body ]
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_phi
          (type
            (type_keyword))
          (value
            (number))
          (local_var)
          (value
            (var
              (local_var)))
          (local_var))))))

================================================================================
alias with constant expression
================================================================================
@alias1 = alias i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 1)
--------------------------------------------------------------------------------

(module
  (alias
    (global_var)
    (type
      (type_keyword))
    (type
      (type_keyword))
    (constant_expr
      (constant_getelementptr
        (type_and_value
          (type
            (local_var)))
        (type_and_value
          (type
            (local_var))
          (value
            (var
              (global_var))))
        (type_and_value
          (type
            (type_keyword))
          (value
            (number)))
        (type_and_value
          (type
            (type_keyword))
          (value
            (number)))))))

================================================================================
dso_local_equivalent call linkage
================================================================================
define void @caller() {
  call void dso_local_equivalent @extern_func()
  ret void
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (linkage
              (dso_local))
            (var
              (global_var)))
          (argument_list)))
      (instruction
        (instruction_ret
          (type_and_value
            (type
              (type_keyword))))))))

================================================================================
string calling convention
================================================================================
declare "cc 9" void @vararg_fn_cc9(i8* %p, ...)
--------------------------------------------------------------------------------

(module
  (declare
    (function_header
      (calling_conv
        (string))
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var))))
        (argument)))))

================================================================================
float with plus sign
================================================================================
define void @main() {
  %n5n4p3 = call float @llvm.amdgcn.cubema(float -5.0, float -4.0, float +3.0)
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (type
                (type_keyword))
              (value
                (float)))
            (argument
              (type
                (type_keyword))
              (value
                (float)))
            (argument
              (type
                (type_keyword))
              (value
                (float)))))))))

================================================================================
atomic ordering and alignment
================================================================================
define void @main() {
  atomicrmw add i8* %p, i8 0 seq_cst, align 1
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_atomicrmw
          (atomic_bin_op_keyword)
          (type_and_value
            (type
              (type_keyword))
            (value
              (var
                (local_var))))
          (type_and_value
            (type
              (type_keyword))
            (value
              (number)))
          (atomic_ordering)
          (alignment
            (number)))))))

================================================================================
function metadata
================================================================================
define void @foo(i1 %f0, i1 %f1, i1 %f2) !prof !{!"function_entry_count", i64 0} {
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var))))
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var))))
        (argument
          (type
            (type_keyword))
          (value
            (var
              (local_var))))))
    (metadata_attachment
      (metadata_name)
      (metadata
        (metadata_tuple
          (metadata
            (specialized_md
              (metadata_ref)))
          (metadata
            (type_and_value
              (type
                (type_keyword))
              (value
                (number)))))))
    (function_body)))

================================================================================
constant expression fneg
================================================================================
define void @main() {
  %fma = call float @llvm.fma.f32(float fneg (float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z)
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (type
                (type_keyword))
              (value
                (constant_expr
                  (constant_fneg
                    (type_and_value
                      (type
                        (type_keyword))
                      (value
                        (constant_expr
                          (constant_cast
                            (cast_inst)
                            (type_and_value
                              (type
                                (type_keyword))
                              (value
                                (constant_expr
                                  (constant_cast
                                    (cast_inst)
                                    (type_and_value
                                      (type
                                        (type_keyword))
                                      (value
                                        (var
                                          (global_var))))
                                    (type
                                      (type_keyword))))))
                            (type
                              (type_keyword))))))))))
            (argument
              (type
                (type_keyword))
              (value
                (var
                  (local_var))))
            (argument
              (type
                (type_keyword))
              (value
                (var
                  (local_var))))))))))

================================================================================
unsigned hex constant
================================================================================
define void @main() {
  %1 = catchpad within %cs1 [i8* null, i32 u0x40, i8* null]
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_catchpad
          (local_var)
          (type_and_value
            (type
              (type_keyword))
            (value))
          (type_and_value
            (type
              (type_keyword))
            (value
              (number)))
          (type_and_value
            (type
              (type_keyword))
            (value)))))))

================================================================================
specialized metadata angle brackets
================================================================================
!0 = distinct !DICompileUnit(language: <LANG1>, file: !1, producer: "clang")
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md_value))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))))))

================================================================================
no_cfi function attribute
================================================================================
@a = global [6 x void ()*] [void ()* no_cfi @f1, void ()* @f1, void ()* @f2, void ()* no_cfi @f2, void ()* @f3, void ()* no_cfi @f3]
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (array_type
          (array_vector_body
            (number)
            (type
              (type_keyword)
              (argument_list)))))
      (value
        (array_value
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (linkage)
              (var
                (global_var))))
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (var
                (global_var))))
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (var
                (global_var))))
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (linkage)
              (var
                (global_var))))
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (var
                (global_var))))
          (type_and_value
            (type
              (type_keyword)
              (argument_list))
            (value
              (linkage)
              (var
                (global_var)))))))))

================================================================================
specialized metadata with function type
================================================================================
!16 = !DITemplateValueParameter(name: "b", type: !17, value: i8 ()* @_Z1av)
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (type_keyword))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (var
            (global_var)))))))

================================================================================
specialized metadata with constant expression
================================================================================
!11 = !DITemplateValueParameter(type: !12, value: %Tricky.1* bitcast (i8* @templateValueParam to %Tricky.1*))
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md
            (metadata_ref)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (var
            (local_var)))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (specialized_md_value
            (type_keyword))
          (specialized_md_value)
          (specialized_md_value
            (var
              (global_var)))
          (specialized_md_value)
          (specialized_md_value
            (var
              (local_var)))
          (specialized_md_value))))))

================================================================================
int hex literal
================================================================================
define void @main() {
  %1 = alloca [u0x200000000 x i8]
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (local_var)
        (instruction_alloca
          (type
            (array_type
              (array_vector_body
                (number)
                (type
                  (type_keyword))))))))))

================================================================================
ifunc with unnamed_addr
================================================================================
@i2 = internal local_unnamed_addr ifunc void(), void()* ()* @f2
--------------------------------------------------------------------------------

(module
  (ifunc
    (global_var)
    (linkage
      (linkage_aux))
    (unnamed_addr)
    (type
      (type_keyword)
      (argument_list))
    (type
      (type_keyword)
      (argument_list)
      (argument_list))
    (global_var)))

================================================================================
global partition
================================================================================
@g1 = global i32 0, partition "part4"
@a1 = alias i32, i32* @g1, partition "part5"
@i1 = ifunc void(), void()* ()* @f1, partition "part6"
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (type_keyword))
      (value
        (number)))
    (attribute
      (string)))
  (alias
    (global_var)
    (type
      (type_keyword))
    (type
      (type_keyword))
    (global_var)
    (attribute
      (string)))
  (ifunc
    (global_var)
    (type
      (type_keyword)
      (argument_list))
    (type
      (type_keyword)
      (argument_list)
      (argument_list))
    (global_var)
    (attribute
      (string))))

================================================================================
specialized metadata string with backslash before quote end
================================================================================
!9 = !DIFile(filename: "./test2.cpp", directory: "C:\")
!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string)))))
  (global_metadata
    (metadata_ref)
    (metadata
      (specialized_md
        (metadata_ref)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (string))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value
          (number))
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)
        (specialized_md_value)))))

================================================================================
signed hex constant
================================================================================
@1 = global i63  s0x012312   ; hexadecimal signed integer constants
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (type_keyword))
      (value
        (number))))
  (comment))

================================================================================
signed hex constant
================================================================================
define void @main() {
  load <16 x i32>, <16 x i32>* %0load <16 x i32>, <16 x i32>* %1load <16 x i32>, <16 x i32>* %2load <16 x i32>, <16 x i32>* %3load <16 x i32>, <16 x i32>* %4load <16 x i32>, <16 x i32>* %5load <16 x i32>, <16 x i32>* %6call <16 x i32> @llvm.hexagon.V6.vd0()
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_load
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (type_and_value
            (type
              (vector_type
                (array_vector_body
                  (number)
                  (type
                    (type_keyword)))))
            (value
              (var
                (local_var))))))
      (instruction
        (instruction_call
          (type
            (vector_type
              (array_vector_body
                (number)
                (type
                  (type_keyword)))))
          (value
            (var
              (global_var)))
          (argument_list))))))

================================================================================
metadata name with escape
================================================================================
!llvm.named.register.r1\3A0 = !{!32}
--------------------------------------------------------------------------------

(module
  (global_metadata
    (metadata_ref)
    (metadata
      (metadata_tuple
        (metadata
          (specialized_md
            (metadata_ref)))))))

================================================================================
global function
================================================================================
@obj = dso_local unnamed_addr constant { { i32, i32 } } {
  { i32, i32 } {
    i32 0,
    i32 trunc (i64 sub (i64 ptrtoint (void ()* dso_local_equivalent @hidden_func to i64), i64 ptrtoint (i32* getelementptr inbounds ({ { i32, i32 } }, { { i32, i32 } }* @obj, i32 0, i32 0, i32 1) to i64)) to i32)
  } }, align 4
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (linkage
      (dso_local))
    (unnamed_addr)
    (type_and_value
      (type
        (struct_type
          (struct_body
            (type
              (struct_type
                (struct_body
                  (type
                    (type_keyword))
                  (type
                    (type_keyword))))))))
      (value
        (struct_value
          (type_and_value
            (type
              (struct_type
                (struct_body
                  (type
                    (type_keyword))
                  (type
                    (type_keyword)))))
            (value
              (struct_value
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (number)))
                (type_and_value
                  (type
                    (type_keyword))
                  (value
                    (constant_expr
                      (constant_cast
                        (cast_inst)
                        (type_and_value
                          (type
                            (type_keyword))
                          (value
                            (constant_expr
                              (constant_bin_op
                                (bin_op_keyword
                                  (atomic_bin_op_keyword))
                                (type_and_value
                                  (type
                                    (type_keyword))
                                  (value
                                    (constant_expr
                                      (constant_cast
                                        (cast_inst)
                                        (type_and_value
                                          (type
                                            (type_keyword)
                                            (argument_list))
                                          (value
                                            (linkage
                                              (dso_local))
                                            (var
                                              (global_var))))
                                        (type
                                          (type_keyword))))))
                                (type_and_value
                                  (type
                                    (type_keyword))
                                  (value
                                    (constant_expr
                                      (constant_cast
                                        (cast_inst)
                                        (type_and_value
                                          (type
                                            (type_keyword))
                                          (value
                                            (constant_expr
                                              (constant_getelementptr
                                                (type_and_value
                                                  (type
                                                    (struct_type
                                                      (struct_body
                                                        (type
                                                          (struct_type
                                                            (struct_body
                                                              (type
                                                                (type_keyword))
                                                              (type
                                                                (type_keyword)))))))))
                                                (type_and_value
                                                  (type
                                                    (struct_type
                                                      (struct_body
                                                        (type
                                                          (struct_type
                                                            (struct_body
                                                              (type
                                                                (type_keyword))
                                                              (type
                                                                (type_keyword))))))))
                                                  (value
                                                    (var
                                                      (global_var))))
                                                (type_and_value
                                                  (type
                                                    (type_keyword))
                                                  (value
                                                    (number)))
                                                (type_and_value
                                                  (type
                                                    (type_keyword))
                                                  (value
                                                    (number)))
                                                (type_and_value
                                                  (type
                                                    (type_keyword))
                                                  (value
                                                    (number)))))))
                                        (type
                                          (type_keyword))))))))))
                        (type
                          (type_keyword))))))))))))
    (attribute
      (alignment
        (number)))))

================================================================================
constant expression function pointer
================================================================================
@obj = constant i64 ptrtoint (void ()* dso_local_equivalent @hidden_func to i64)
--------------------------------------------------------------------------------

(module
  (global_global
    (global_var)
    (type_and_value
      (type
        (type_keyword))
      (value
        (constant_expr
          (constant_cast
            (cast_inst)
            (type_and_value
              (type
                (type_keyword)
                (argument_list))
              (value
                (linkage
                  (dso_local))
                (var
                  (global_var))))
            (type
              (type_keyword))))))))

================================================================================
inline metadata
================================================================================
define void @main() {
  call void @llvm.dbg.value(metadata !DIArgList(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0)), metadata !14, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_stack_value)), !dbg !15
}
--------------------------------------------------------------------------------

(module
  (define
    (function_header
      (type
        (type_keyword))
      (global_var)
      (argument_list))
    (function_body
      (instruction
        (instruction_call
          (type
            (type_keyword))
          (value
            (var
              (global_var)))
          (argument_list
            (argument
              (metadata
                (specialized_md
                  (metadata_ref)
                  (specialized_md_value
                    (type_keyword))
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (specialized_md_value
                      (specialized_md_value
                        (number))
                      (specialized_md_value)
                      (specialized_md_value
                        (type_keyword)))
                    (specialized_md_value)
                    (specialized_md_value
                      (specialized_md_value
                        (number))
                      (specialized_md_value)
                      (specialized_md_value
                        (type_keyword)))
                    (specialized_md_value)
                    (specialized_md_value
                      (var
                        (global_var)))
                    (specialized_md_value)
                    (specialized_md_value
                      (type_keyword))
                    (specialized_md_value
                      (number))
                    (specialized_md_value)
                    (specialized_md_value
                      (type_keyword))
                    (specialized_md_value
                      (number))))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref))))
            (argument
              (metadata
                (specialized_md
                  (metadata_ref)
                  (specialized_md_value)
                  (specialized_md_value)
                  (specialized_md_value
                    (number))
                  (specialized_md_value)
                  (specialized_md_value))))))
        (metadata_refs
          (metadata_name)
          (metadata
            (specialized_md
              (metadata_ref))))))))
